package com.itheima.d09_innerclass_noname_use;

import java.util.ArrayList;
import java.util.function.DoubleConsumer;
import java.util.function.Predicate;
import java.util.function.ToDoubleFunction;

/**
 * 目标：了解匿名内部类的使用场景
 */
public class Test {

    //定义功能方法，喂养所有动物
    public static void  feed(Animal a){
        a.eat();
    }

    //定义功能方法，让所有具有游泳技能的选手，游泳
    public static void swim(ISwimming swim){
        System.out.println("开始计时...");
        swim.swim();
        System.out.println("结束计时...");
    }


    public static void main(String[] args) {
        //需求1：定义功能方法，喂养所有动物
        /*
            调用方法时：需要传递动物父类
                方式一：设计子类，使用子类创建子类对象
                方式二：匿名内部类
         */
        Animal dog = new Animal("大黄狗") {
            @Override
            public void eat() {
                System.out.println(getName()+",啃骨头");
            }
        };

        feed(dog);

        feed(new Animal("小花猫") {
            @Override
            public void eat() {
                System.out.println(getName()+",吃鱼");
            }
        });


        //需求2：定义功能方法，让所有具有游泳技能的选手，游泳
        /**
         * 调用方法时：需要传递游泳技能接口
         * 方式一：设计子类，使用子类创建子类对象
         * 方式二：匿名内部类
         */

        ISwimming pig = new ISwimming() {
            @Override
            public void swim() {
                System.out.println("小猪，游泳");
            }
        };
        swim(pig);


        swim(new ISwimming() {
            @Override
            public void swim() {
                System.out.println("雨哥哥，游泳");
            }
        });

        swim(new ISwimming() {
            @Override
            public void swim() {
                System.out.println("洋仔仔，游泳");
            }
        });


        System.out.println("==================");


    }
}
